First steps
Loading Librairies
##Loading Devices data In that case the csv generated used the tabulation separator. Adapt the delim parameter to your specific use case (coma, semicolon etc).
Devices
DXS vs. OS Version and architecture

DXS by Device Model
All but Lenovo

Lenovo

CPU

Memory

Boot
General

All Models (exluding Lenovo)

Lenovo only

OS

Logon

AD Site

Devices (no Lenovo)

Devices (only Lenovo)


RAM

Disk Space

Memory

CPU

Applications
High number of Excecutions
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OgogICAgcmVmZXJlbmNlX2RvY3g6IHRlbXBsYXRlLmRvY3gKLS0tCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLGV2YWwgPSBUUlVFLHdhcm5pbmcgPSBGQUxTRSxtZXNzYWdlID0gRkFMU0UpCmBgYAoKIyBGaXJzdCBzdGVwcwojIyBMb2FkaW5nIExpYnJhaXJpZXMKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncmVwZWwpCmxpYnJhcnkoZm9ybWF0dGFibGUpCgpjdXN0b21HcmVlbjAgPSAiI0RlRjdFOSIKY3VzdG9tR3JlZW4gPSAiIzcxQ0E5NyIKY3VzdG9tUmVkID0gIiNmZjdmN2YiCmN1c3RvbU9yYW5nZSA9ICIjRjU4RjI4IgpgYGAKCiMjTG9hZGluZyBEZXZpY2VzIGRhdGEgCkluIHRoYXQgY2FzZSB0aGUgY3N2IGdlbmVyYXRlZCB1c2VkIHRoZSB0YWJ1bGF0aW9uIHNlcGFyYXRvci4gQWRhcHQgdGhlIGRlbGltIHBhcmFtZXRlciB0byB5b3VyIHNwZWNpZmljIHVzZSBjYXNlIChjb21hLCBzZW1pY29sb24gZXRjKS4KYGBge3J9CmRmIDwtIHJlYWRfZGVsaW0oZmlsZSA9ICIuL2RhdGEtcmF3L0RFWF9EZXZpY2VfZGF0YV9CbGFjc3RvbmVfQXByaWwyMDIwLmNzdiIsIGRlbGltID0gIlx0IikKZGYkYFN5c3RlbSBib290IGR1cmF0aW9uIGJhc2VsaW5lIFtzXWAgPC0gYXMubnVtZXJpYyhkZiRgU3lzdGVtIGJvb3QgZHVyYXRpb24gYmFzZWxpbmUgW3NdYCkKZGYkYExvZ29uIGR1cmF0aW9uIGJhc2VsaW5lIFtzXWAgPC0gYXMubnVtZXJpYyhkZiRgTG9nb24gZHVyYXRpb24gYmFzZWxpbmUgW3NdYCkKZGYkYE51bWJlciBvZiBjb3Jlc2AgPC0gYXMubnVtZXJpYyhkZiRgTnVtYmVyIG9mIGNvcmVzYCkKaGVhZChkZikKYGBgCgojIyBMb2FkaW5nIEFwcGxpY2F0aW9uIGRhdGEKYGBge3J9CmRmLmFwcCA8LSByZWFkX2RlbGltKGZpbGUgPSAiLi9kYXRhLXJhdy9ERVhfQXBwX2RhdGFfQmxhY3N0b25lX0FwcmlsMjAyMC5jc3YiLCBkZWxpbSA9ICJcdCIpCmRmLmFwcCA8LSBkZi5hcHAgJT4lCiAgbXV0YXRlKGBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtNQl1gID0gcm91bmQoYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gW2J5dGVzXWAvKDEwMjReMiksMikpICU+JQogIHNlbGVjdChldmVyeXRoaW5nKCksIC1gQXZlcmFnZSBtZW1vcnkgdXNhZ2UgcGVyIGV4ZWN1dGlvbiBbYnl0ZXNdYCkKaGVhZChkZi5hcHApCmBgYAoKCiMjIExvYWRpbmcgQ2hyb21lIERhdGEKYGBge3J9CmRmLmNociA8LSByZWFkX2RlbGltKGZpbGUgPSAiLi9kYXRhLXJhdy9ERVhfQ2hyb21lX0JsYWNzdG9uZV9BcHJpbDIwMjAuY3N2IiwgZGVsaW0gPSAiXHQiKQpkZi5jaHIgPC0gZGYuY2hyICU+JQogIG11dGF0ZShgQXZlcmFnZSBtZW1vcnkgdXNhZ2UgcGVyIGV4ZWN1dGlvbiBbTUJdYCA9IHJvdW5kKGBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtieXRlc11gLygxMDI0XjIpLDEpKSAlPiUKICBzZWxlY3QoZXZlcnl0aGluZygpLCAtYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gW2J5dGVzXWApCmhlYWQoZGYuY2hyKQpgYGAKCiMjIExvYWQgT2ZmaWNlIERhdGEKYGBge3J9CmRmLm9mZmljZSA8LSByZWFkX2RlbGltKGZpbGUgPSAiLi9kYXRhLXJhdy9ERVhfT2ZmaWNlX0JsYWNzdG9uZV9BcHJpbDIwMjAuY3N2IiwgZGVsaW0gPSAiXHQiLCBjb2xfdHlwZXMgPSBjb2xzKGBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtieXRlc11gID0gY29sX251bWJlcigpKSApCmRmLm9mZmljZSA8LSBkZi5vZmZpY2UgJT4lCiAgbXV0YXRlKGBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtNQl1gID0gcm91bmQoYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gW2J5dGVzXWAvKDEwMjReMiksMSkpICU+JQogIHNlbGVjdChldmVyeXRoaW5nKCksIC1gQXZlcmFnZSBtZW1vcnkgdXNhZ2UgcGVyIGV4ZWN1dGlvbiBbYnl0ZXNdYCwgLWBBcHBsaWNhdGlvbiBuYW1lYCkKaGVhZChkZi5vZmZpY2UpCmBgYAoKIyBEZXZpY2VzCiMjIERYUyB2cy4gT1MgVmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlCmBgYHtyIGZpZy53aWR0aD0xMyxmaWcuaGVpZ2h0PTh9CmRmICU+JQogIGdyb3VwX2J5KGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgKSAlPiUKICBzdW1tYXJpemUoYE51bWJlciBvZiBkZXZpY2VzYCA9IG4oKSwKICAgZGV4X3Njb3JlID0gbWVhbihgRGlnaXRhbCBFeHBlcmllbmNlIFNjb3JlIChEaWdpdGFsIEV4cGVyaWVuY2UgU2NvcmUpYCkpICU+JQogIG11dGF0ZShgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCA9IHN0cl9yZXBsYWNlX2FsbChgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwiV2luZG93cyIsICJXIikpICU+JQogIG11dGF0ZShgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCA9IHN0cl9yZXBsYWNlX2FsbChgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwiRW50ZXJwcmlzZSIsICJFIikpICU+JQogIG11dGF0ZShgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCA9IHN0cl9yZXBsYWNlX2FsbChgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwiUHJvZmVzc2lvbmFsIiwgIlBybyIpKSAlPiUKICBtdXRhdGUoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAgPSBzdHJfcmVwbGFjZV9hbGwoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAsIig2NCBiaXRzKSIsICI2NCIpKSAlPiUKICBtdXRhdGUoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAgPSBzdHJfcmVwbGFjZV9hbGwoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAsIigzMiBiaXRzKSIsICIzMiIpKSAlPiUKICBhcnJhbmdlKGRlc2MoYE51bWJlciBvZiBkZXZpY2VzYCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gcmVvcmRlcihgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwgLWBOdW1iZXIgb2YgZGV2aWNlc2ApKSkgKwogIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeSA9IGBOdW1iZXIgb2YgZGV2aWNlc2ApLCBzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICIjMTA0NkE4IiwgY29sb3VyID0gImJsYWNrIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHkgPSBkZXhfc2NvcmUgKiAzMDApLCBjb2xvdXIgPSAiIzMxOTRGNyIsIGdyb3VwID0gMSkgKwogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh5ID0gZGV4X3Njb3JlICogMzAwKSwgY29sb3VyID0gIiNGOUJBMzciLCBncm91cCA9IDEpICsKICBnZW9tX3RleHQobWFwcGluZyA9IGFlcyh5ID0gZGV4X3Njb3JlICogMzAwLCBsYWJlbCA9IHJvdW5kKGRleF9zY29yZSwxKSksIGNvbG91ciA9ICIjRkY3NDYxIiwgZm9udGZhY2U9ImJvbGQiLGdyb3VwID0gMSwgc2l6ZSA9IDUsIHZqdXN0ID0gLTEpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh0cmFucyA9IH4gLiAvMzAwLCBuYW1lID0gIkRlWCIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgc2l6ZSA9IDE1KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPTEyKSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTUpKQpnZ3NhdmUoImltYWdlcy9PU19kZXhfbnVtYmVyX29mX2RldmljZXMucG5nIikKYGBgCgoKIyMgRFhTIGJ5IERldmljZSBNb2RlbAojIyMgQWxsIGJ1dCBMZW5vdm8KYGBge3IgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9OX0KZGYgJT4lCiAgZmlsdGVyKGBEZXZpY2UgbWFudWZhY3R1cmVyYCAhPSAiTGVub3ZvIikgJT4lCiAgZ3JvdXBfYnkoYERldmljZSBtb2RlbGApICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSwKICAgICAgICAgICAgRFhTX0RldmljZSA9IG1lYW4oYERYUyAtIERldmljZSAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIERYU19Cb290ID0gbWVhbihgQm9vdCBzcGVlZCAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIERYU19Mb2dvbiA9IG1lYW4oYExvZ29uIGR1cmF0aW9uIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgRFhTX0JTT0QgPSBtZWFuKGBCU09EcyAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIERYU19SZXNldCA9IG1lYW4oYEhhcmQgcmVzZXRzIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgRFhTX0ZyZWVfU3BhY2UgPSBtZWFuKGBTeXN0ZW0gZnJlZSBzcGFjZSAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIERYU19DUFUgPSBtZWFuKGBDUFUgdXNhZ2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfTWVtb3J5ID0gbWVhbihgTWVtb3J5IHVzYWdlIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKQogICAgICAgICAgICApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPj0yNSkgJT4lCiAgYXJyYW5nZShkZXNjKG51bWJlcl9vZl9kZXZpY2VzKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGdhdGhlcihrZXkgID0gIkRYUyIsIHZhbHVlID0gInNjb3JlIiwgLWBEZXZpY2UgbW9kZWxgLC1udW1iZXJfb2ZfZGV2aWNlcykgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFNfIiwgIiIpKSAlPiUKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gcmVvcmRlcihgRGV2aWNlIG1vZGVsYCwgLW51bWJlcl9vZl9kZXZpY2VzKSwgeT1zY29yZSwgZmlsbCA9IERYUykpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAic3RhY2siLCBhbHBoYT0wLjgsIGNvbG9yPSJibGFjayIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsPXJvdW5kKHNjb3JlLDEpLCBjb2xvdXI9c2NvcmUpLCBwb3NpdGlvbj1wb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemU9Niwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9sYWJlbChhZXMoeSA9LTEsIGxhYmVsPXBhc3RlKG51bWJlcl9vZl9kZXZpY2VzLCAiIGRldmljZXMiKSksIHNob3cubGVnZW5kID0gRiwgZmlsbCA9ICJ3aGl0ZSIsIHNpemU9NSkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzExMUY2NSIsICIjMzE5NEY3IiwgIiMxMDQ2QTgiLCAiI0Y5QkEzNyIsICIjQkE3NEQyIiwgIiMwOEIzQUIiLCAiI0ZGNzQ2MSIsICIjQjNCQkM4IikpICsKICBzY2FsZV9jb2xvdXJfY29udGludW91cyhsb3c9InJlZCIsIGhpZ2g9ImJsYWNrIikrCiAgdGhlbWVfdm9pZCgpKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSxzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKQpnZ3NhdmUoImltYWdlcy9EWFNfRGV2aWNlTW9kZWxfbnVtYmVyX29mX2RldmljZXMucG5nIikKYGBgCgoKIyMjIExlbm92bwpgYGB7ciBmaWcud2lkdGg9MjAsZmlnLmhlaWdodD0xNX0KZGYgJT4lCiAgZmlsdGVyKGBEZXZpY2UgbWFudWZhY3R1cmVyYCA9PSAiTGVub3ZvIikgJT4lCiAgZ3JvdXBfYnkoYERldmljZSBwcm9kdWN0IHZlcnNpb25gKSAlPiUKICBzdW1tYXJpemUobnVtYmVyX29mX2RldmljZXMgPSBuKCksCiAgICAgICAgICAgIERYU19EZXZpY2UgPSBtZWFuKGBEWFMgLSBEZXZpY2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfQm9vdCA9IG1lYW4oYEJvb3Qgc3BlZWQgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfTG9nb24gPSBtZWFuKGBMb2dvbiBkdXJhdGlvbiAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIERYU19CU09EID0gbWVhbihgQlNPRHMgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfUmVzZXQgPSBtZWFuKGBIYXJkIHJlc2V0cyAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIERYU19GcmVlX1NwYWNlID0gbWVhbihgU3lzdGVtIGZyZWUgc3BhY2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfQ1BVID0gbWVhbihgQ1BVIHVzYWdlIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgRFhTX01lbW9yeSA9IG1lYW4oYE1lbW9yeSB1c2FnZSAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCkKICApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBhcnJhbmdlKGRlc2MobnVtYmVyX29mX2RldmljZXMpKSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgZ2F0aGVyKGtleSAgPSAiRFhTIiwgdmFsdWUgPSAic2NvcmUiLCAtYERldmljZSBwcm9kdWN0IHZlcnNpb25gLC1udW1iZXJfb2ZfZGV2aWNlcykgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFNfIiwgIiIpKSAlPiUKICBmaWx0ZXIoc2NvcmUgPjApICU+JQogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSByZW9yZGVyKGBEZXZpY2UgcHJvZHVjdCB2ZXJzaW9uYCwgLW51bWJlcl9vZl9kZXZpY2VzKSwgeT1zY29yZSwgZmlsbCA9IERYUykpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAic3RhY2siLCBhbHBoYT0wLjgsIGNvbG9yPSJibGFjayIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsPXJvdW5kKHNjb3JlLDEpLCBjb2xvdXI9c2NvcmUpLHBvc2l0aW9uPXBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgc2l6ZT01LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX2xhYmVsKGFlcyh5ID0tMSwgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIiwgc2l6ZT01KSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMTExRjY1IiwgIiMzMTk0RjciLCAiIzEwNDZBOCIsICIjRjlCQTM3IiwgIiNCQTc0RDIiLCAiIzA4QjNBQiIsICIjRkY3NDYxIiwgIiNCM0JCQzgiKSkgKwogIHNjYWxlX2NvbG91cl9jb250aW51b3VzKGxvdz0icmVkIiwgaGlnaD0iYmxhY2siKSsKICB0aGVtZV92b2lkKCkrCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLHNpemUgPSAxNiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNikpCgpnZ3NhdmUoImltYWdlcy9EWFNfTGVub3ZvX251bWJlcl9vZl9kZXZpY2VzLnBuZyIpCmBgYAoKIyMgQ1BVCmBgYHtyIGZpZy53aWR0aD0yMixmaWcuaGVpZ2h0PTE1fQpkZiAlPiUKICBncm91cF9ieShgQ1BVIG1vZGVsYCkgJT4lCiAgc3VtbWFyaXplKG51bWJlcl9vZl9kZXZpY2VzID0gbigpLAogICAgICAgICAgICBgSGlnaCBDUFUgVGltZSBSYXRpbyAobWVhbilgID0gbWVhbihgSGlnaCBkZXZpY2Ugb3ZlcmFsbCBDUFUgdGltZSByYXRpbyBbJV1gLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBgRFhTIENQVWAgPSByb3VuZChtZWFuKGBDUFUgdXNhZ2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBgRFhTIERldmljZWA9IHJvdW5kKG1lYW4oYERYUyAtIERldmljZSAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksMSkKICAgICAgICAgICAgKSAlPiUKICBhcnJhbmdlKC1udW1iZXJfb2ZfZGV2aWNlcykgJT4lCiAgZmlsdGVyKG51bWJlcl9vZl9kZXZpY2VzID4gNSkgJT4lCiAgI25hLm9taXQoKSAlPiUKICBnYXRoZXIoa2V5PSJEWFMiLCB2YWx1ZSA9ICJTY29yZSIsIC1gQ1BVIG1vZGVsYCwtbnVtYmVyX29mX2RldmljZXMsIC1gSGlnaCBDUFUgVGltZSBSYXRpbyAobWVhbilgKSAlPiUKICBtdXRhdGUoYERYU2AgPSBzdHJfcmVwbGFjZV9hbGwoYERYU2AsIkRYUyAiLCAiIiksCiAgICAgICAgIGBDUFUgbW9kZWxgID0gc3RyX3JlcGxhY2UoYENQVSBtb2RlbGAsICIgQCAiLCAiXG4iKSkgJT4lCiAgZmlsdGVyKG51bWJlcl9vZl9kZXZpY2VzID4yNSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGBDUFUgbW9kZWxgKSkrCiAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh5PVNjb3JlLCBmaWxsID0gRFhTKSwgc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIiwgYWxwaGE9MC44KSsKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeSA9IGBIaWdoIENQVSBUaW1lIFJhdGlvIChtZWFuKWAqMTApLCBjb2xvcj0icmVkIiwgc3RhdCA9ICJpZGVudGl0eSIpKwogIGdlb21fbGFiZWxfcmVwZWwoYWVzKHkgPSBgSGlnaCBDUFUgVGltZSBSYXRpbyAobWVhbilgKjEwLCBsYWJlbD0gcGFzdGUocm91bmQoYEhpZ2ggQ1BVIFRpbWUgUmF0aW8gKG1lYW4pYCwyKSwiJSIpKSxzdGF0ID0gInVuaXF1ZSIsc2l6ZT02KSsKICBnZW9tX2xhYmVsKGFlcyh5ID0tMSwgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIiwgc2l6ZT02KSsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+Li8xMCwgbmFtZSA9ICJIaWdoIENQVSB0aW1lIHJhdGlvICglKSIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzExMUY2NSIsICIjMzE5NEY3IikpKwogIHRoZW1lX21pbmltYWwoKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNikpCgpnZ3NhdmUoImltYWdlcy9DUFVfREVYX251bWJlcl9vZl9kZXZpY2VzLnBuZyIpCgpgYGAKCiMjIE1lbW9yeQpgYGB7ciBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYgJT4lCiAgbXV0YXRlKGBUb3RhbCBSQU0gW2J5dGVzXWAgPSBgVG90YWwgUkFNIFtieXRlc11gLygxMDI0XjMpKSAlPiUKICBtdXRhdGUoYFRvdGFsIFJBTSBbYnl0ZXNdYCA9IGZhY3RvcihgVG90YWwgUkFNIFtieXRlc11gKSkgJT4lCiAgZ3JvdXBfYnkoYFRvdGFsIFJBTSBbYnl0ZXNdYCkgJT4lCiAgc3VtbWFyaXplKG51bWJlcl9vZl9kZXZpY2VzID0gbigpLAogICAgICAgICAgICBgSGlnaCBkZXZpY2UgbWVtb3J5IHRpbWUgcmF0aW8gWyVdYCA9IG1lYW4oYEhpZ2ggZGV2aWNlIG1lbW9yeSB0aW1lIHJhdGlvIFslXWAsIG5hLnJtID0gVCksCiAgICAgICAgICAgIGBEWFMgTWVtb3J5YCA9IHJvdW5kKG1lYW4oYE1lbW9yeSB1c2FnZSAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksMSksCiAgICAgICAgICAgIGBEWFMgRGV2aWNlYD0gcm91bmQobWVhbihgRFhTIC0gRGV2aWNlIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwxKQogICAgICAgICAgICApICU+JQogIGFycmFuZ2UoLW51bWJlcl9vZl9kZXZpY2VzKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPiA1KSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgZ2F0aGVyKGtleT0iRFhTIiwgdmFsdWUgPSAiU2NvcmUiLCAtYFRvdGFsIFJBTSBbYnl0ZXNdYCwtbnVtYmVyX29mX2RldmljZXMsIC1gSGlnaCBkZXZpY2UgbWVtb3J5IHRpbWUgcmF0aW8gWyVdYCkgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFMgIiwgIiIpKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPiAxMCkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGBUb3RhbCBSQU0gW2J5dGVzXWApKSsKICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHk9U2NvcmUsIGZpbGwgPSBEWFMpLCBzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siLCBhbHBoYT0wLjgpKwogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh5ID0gYEhpZ2ggZGV2aWNlIG1lbW9yeSB0aW1lIHJhdGlvIFslXWAvMTApLCBjb2xvcj0icmVkIiwgc3RhdCA9ICJpZGVudGl0eSIpKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHkgPSBgSGlnaCBkZXZpY2UgbWVtb3J5IHRpbWUgcmF0aW8gWyVdYC8xMCksIGNvbG9yPSJyZWQiLCBzdGF0ID0gImlkZW50aXR5IiwgZ3JvdXA9MSkrCiAgZ2VvbV9sYWJlbF9yZXBlbChhZXMoeSA9IGBIaWdoIGRldmljZSBtZW1vcnkgdGltZSByYXRpbyBbJV1gLzEwLCBsYWJlbD0gcGFzdGUocm91bmQoYEhpZ2ggZGV2aWNlIG1lbW9yeSB0aW1lIHJhdGlvIFslXWAsMiksIiUiKSksc3RhdCA9ICJ1bmlxdWUiLCBzaXplPTUpKwogIGdlb21fbGFiZWwoYWVzKHkgPS0wLjIsIGxhYmVsPXBhc3RlKG51bWJlcl9vZl9kZXZpY2VzLCAiIGRldmljZXMiKSksIHNob3cubGVnZW5kID0gRiwgZmlsbCA9ICJ3aGl0ZSIsIHNpemU9NSkrCiAgc2NhbGVfeV9jb250aW51b3VzKHNlYy5heGlzID0gc2VjX2F4aXMofi4qMTAsIG5hbWUgPSAiSGlnaCBNZW1vcnkgdGltZSByYXRpbyIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzExMUY2NSIsICIjMzE5NEY3IikpKwogIHRoZW1lX21pbmltYWwoKSsKICBsYWJzKHg9IlJBTSIpKwogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKZ2dzYXZlKCJpbWFnZXMvTWVtb3J5X0RFWF9udW1iZXJfb2ZfZGV2aWNlcy5wbmciKQpgYGAKCgojIyBCb290CiMjIyBHZW5lcmFsCmBgYHtyIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpkZiAlPiUKICBncm91cF9ieShib290X2ludGVydmFsID0gY3V0X3dpZHRoKGBTeXN0ZW0gYm9vdCBkdXJhdGlvbiBiYXNlbGluZSBbc11gLCAxMCwgYm91bmRhcnkgPSAxMCkpICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGZpbHRlcihudW1iZXJfb2ZfZGV2aWNlcyA+IDIwKSAlPiUKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4PWJvb3RfaW50ZXJ2YWwpKSArCiAgZ2VvbV9iYXIoYWVzKHk9bnVtYmVyX29mX2RldmljZXMpLCBzdGF0ID0gImlkZW50aXR5IiwgZmlsbD0iIzExMUY2NSIsIGNvbG9yPSJibGFjayIpICsKICBnZW9tX2xhYmVsKGFlcyh5ID1udW1iZXJfb2ZfZGV2aWNlcywgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIiwgc2l6ZT01KSsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoeD0iQm9vdCB0aW1lIChzKSIsIHk9Ik51bWJlciBvZiBkZXZpY2VzIikrCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpKQoKYGBgCgojIyMgQWxsIE1vZGVscyAoZXhsdWRpbmcgTGVub3ZvKQpgYGB7ciBlY2hvPUZBTFNFLCBldmFsPVRSVUUsIGZpZy5hbGlnbj0iY2VudGVyIiwgbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CmRmICU+JQogIGZpbHRlcihgRGV2aWNlIG1hbnVmYWN0dXJlcmAgIT0gIkxlbm92byIpICU+JQogIGdyb3VwX2J5KGBEZXZpY2UgbW9kZWxgKSAlPiUKICBzdW1tYXJpemUobnVtYmVyX29mX2RldmljZXMgPSBuKCksCiAgICAgICAgICAgIERYU19EZXZpY2UgPSBtZWFuKGBEWFMgLSBEZXZpY2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfQm9vdCA9IG1lYW4oYEJvb3Qgc3BlZWQgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBCb290X2R1cmF0aW9uID0gbWVhbihgU3lzdGVtIGJvb3QgZHVyYXRpb24gYmFzZWxpbmUgW3NdYCwgbmEucm0gPSBUKQogICAgICAgICAgICApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPj0yNSkgJT4lCiAgYXJyYW5nZShkZXNjKG51bWJlcl9vZl9kZXZpY2VzKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGdhdGhlcihrZXkgID0gIkRYUyIsIHZhbHVlID0gIlNjb3JlIiwgLWBEZXZpY2UgbW9kZWxgLC1udW1iZXJfb2ZfZGV2aWNlcywtQm9vdF9kdXJhdGlvbikgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFNfIiwgIiIpKSAlPiUKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gcmVvcmRlcihgRGV2aWNlIG1vZGVsYCwgLW51bWJlcl9vZl9kZXZpY2VzKSkpKwogIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeT1TY29yZSwgZmlsbCA9IERYUyksIHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIsIGFscGhhPTAuOCkrCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHkgPSBCb290X2R1cmF0aW9uLzEwKSwgY29sb3I9InJlZCIsIHN0YXQgPSAiaWRlbnRpdHkiKSsKICBnZW9tX2xhYmVsX3JlcGVsKGFlcyh5ID0gQm9vdF9kdXJhdGlvbi8xMCwgbGFiZWw9IHBhc3RlKHJvdW5kKEJvb3RfZHVyYXRpb24sMSksInMiKSksc3RhdCA9ICJ1bmlxdWUiLCBzaXplPTUpKwogIGdlb21fbGFiZWwoYWVzKHkgPS0wLjEsIGxhYmVsPXBhc3RlKG51bWJlcl9vZl9kZXZpY2VzLCAiIGRldmljZXMiKSksIHNob3cubGVnZW5kID0gRiwgZmlsbCA9ICJ3aGl0ZSIsIHNpemU9NSkrCiAgc2NhbGVfeV9jb250aW51b3VzKHNlYy5heGlzID0gc2VjX2F4aXMofi4qMTAsIG5hbWUgPSAiQm9vdCBkdXJhdGlvbiAocykiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMxMTFGNjUiLCAiIzMxOTRGNyIpKSsKICB0aGVtZV9taW5pbWFsKCkrCiAgbGFicyh4PSIiKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCkpCmdnc2F2ZSgiaW1hZ2VzL0RYU19BbGxfbm9MZW5vdm9fYm9vdC5wbmciKQoKYGBgCgojIyMgTGVub3ZvIG9ubHkKYGBge3IgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CmRmICU+JQogIGZpbHRlcihgRGV2aWNlIG1hbnVmYWN0dXJlcmAgPT0gIkxlbm92byIpICU+JQogIGdyb3VwX2J5KGBEZXZpY2UgcHJvZHVjdCB2ZXJzaW9uYCkgJT4lCiAgc3VtbWFyaXplKG51bWJlcl9vZl9kZXZpY2VzID0gbigpLAogICAgICAgICAgICBEWFNfRGV2aWNlID0gbWVhbihgRFhTIC0gRGV2aWNlIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgRFhTX0Jvb3QgPSBtZWFuKGBCb290IHNwZWVkIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgQm9vdF9kdXJhdGlvbiA9IG1lYW4oYFN5c3RlbSBib290IGR1cmF0aW9uIGJhc2VsaW5lIFtzXWAsIG5hLnJtID0gVCkKICAgICAgICAgICAgKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKG51bWJlcl9vZl9kZXZpY2VzID49NSkgJT4lCiAgYXJyYW5nZShkZXNjKG51bWJlcl9vZl9kZXZpY2VzKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGdhdGhlcihrZXkgID0gIkRYUyIsIHZhbHVlID0gIlNjb3JlIiwgLWBEZXZpY2UgcHJvZHVjdCB2ZXJzaW9uYCwtbnVtYmVyX29mX2RldmljZXMsLUJvb3RfZHVyYXRpb24pICU+JQogIG11dGF0ZShgRFhTYCA9IHN0cl9yZXBsYWNlX2FsbChgRFhTYCwiRFhTXyIsICIiKSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IHJlb3JkZXIoYERldmljZSBwcm9kdWN0IHZlcnNpb25gLCAtbnVtYmVyX29mX2RldmljZXMpKSkrCiAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh5PVNjb3JlLCBmaWxsID0gRFhTKSwgc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIiwgYWxwaGE9MC44KSsKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeSA9IEJvb3RfZHVyYXRpb24vMTApLCBjb2xvcj0icmVkIiwgc3RhdCA9ICJpZGVudGl0eSIpKwogIGdlb21fbGFiZWxfcmVwZWwoYWVzKHkgPSBCb290X2R1cmF0aW9uLzEwLCBsYWJlbD0gcGFzdGUocm91bmQoQm9vdF9kdXJhdGlvbiwxKSwiIHNlYyIpKSxzdGF0ID0gInVuaXF1ZSIsIHNpemU9NSkrCiAgZ2VvbV9sYWJlbChhZXMoeSA9LTAuMiwgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIiwgc2l6ZT01KSsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+LioxMCwgbmFtZSA9ICJCb290IGR1cmF0aW9uIChzKSIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzExMUY2NSIsICIjMzE5NEY3IikpKwogIGxhYnMoeD0iIikrCiAgdGhlbWVfbWluaW1hbCgpKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSxzaXplID0gMTYpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKZ2dzYXZlKCJpbWFnZXMvRFhTX0FsbF9ub0xlbm92b19ib290LnBuZyIpCgpgYGAKCiMjIyBPUwpgYGB7ciBmaWcud2lkdGg9MTMsZmlnLmhlaWdodD04fQpkZiAlPiUKICBncm91cF9ieShgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCkgJT4lCiAgc3VtbWFyaXplKGBudW1iZXJfb2ZfZGV2aWNlc2AgPSBuKCksCiAgICAgICAgICAgIERYU19EZXZpY2UgPSBtZWFuKGBEWFMgLSBEZXZpY2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBEWFNfQm9vdCA9IG1lYW4oYEJvb3Qgc3BlZWQgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBCb290X2R1cmF0aW9uID0gbWVhbihgU3lzdGVtIGJvb3QgZHVyYXRpb24gYmFzZWxpbmUgW3NdYCwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgID0gc3RyX3JlcGxhY2VfYWxsKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgLCJXaW5kb3dzIiwgIlciKSkgJT4lCiAgbXV0YXRlKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgID0gc3RyX3JlcGxhY2VfYWxsKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgLCJFbnRlcnByaXNlIiwgIkUiKSkgJT4lCiAgbXV0YXRlKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgID0gc3RyX3JlcGxhY2VfYWxsKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgLCJQcm9mZXNzaW9uYWwiLCAiUHJvIikpICU+JQogIG11dGF0ZShgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCA9IHN0cl9yZXBsYWNlX2FsbChgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwiKDY0IGJpdHMpIiwgIjY0IikpICU+JQogIG11dGF0ZShgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCA9IHN0cl9yZXBsYWNlX2FsbChgT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwiKDMyIGJpdHMpIiwgIjMyIikpICU+JQogIGFycmFuZ2UoZGVzYyhgbnVtYmVyX29mX2RldmljZXNgKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGZpbHRlcihudW1iZXJfb2ZfZGV2aWNlcyA+PTUpICU+JQogIGFycmFuZ2UoZGVzYyhudW1iZXJfb2ZfZGV2aWNlcykpICU+JQogIG5hLm9taXQoKSAlPiUKICBnYXRoZXIoa2V5ICA9ICJEWFMiLCB2YWx1ZSA9ICJTY29yZSIsIC1gT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCwtbnVtYmVyX29mX2RldmljZXMsLUJvb3RfZHVyYXRpb24pICU+JQogIG11dGF0ZShgRFhTYCA9IHN0cl9yZXBsYWNlX2FsbChgRFhTYCwiRFhTXyIsICIiKSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IHJlb3JkZXIoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAsIC1udW1iZXJfb2ZfZGV2aWNlcykpKSsKICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHk9U2NvcmUsIGZpbGwgPSBEWFMpLCBzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siLCBhbHBoYT0wLjgpKwogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh5ID0gQm9vdF9kdXJhdGlvbi8xMCksIGNvbG9yPSJyZWQiLCBzdGF0ID0gImlkZW50aXR5IikrCiAgZ2VvbV9sYWJlbF9yZXBlbChhZXMoeSA9IEJvb3RfZHVyYXRpb24vMTAsIGxhYmVsPSBwYXN0ZShyb3VuZChCb290X2R1cmF0aW9uLDEpLCIgc2VjIikpLHN0YXQgPSAidW5pcXVlIiwgc2l6ZT01KSsKICBnZW9tX2xhYmVsKGFlcyh5ID0tMC4zLCBsYWJlbD1wYXN0ZShudW1iZXJfb2ZfZGV2aWNlcywgIiBkZXZpY2VzIikpLCBzaG93LmxlZ2VuZCA9IEYsIGZpbGwgPSAid2hpdGUiLHNpemU9NSkrCiAgc2NhbGVfeV9jb250aW51b3VzKHNlYy5heGlzID0gc2VjX2F4aXMofi4qMTAsIG5hbWUgPSAiQm9vdCBkdXJhdGlvbiAocykiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMxMTFGNjUiLCAiIzMxOTRGNyIpKSsKICB0aGVtZV9taW5pbWFsKCkrCiAgbGFicyh4PSIiKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCkpCmdnc2F2ZSgiaW1hZ2VzL0RYU19PU19ib290LnBuZyIpCmBgYAoKIyMgTG9nb24KYGBge3IgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CmRmICU+JQogIGdyb3VwX2J5KGxvZ29uX2ludGVydmFsID0gY3V0X3dpZHRoKGBMb2dvbiBkdXJhdGlvbiBiYXNlbGluZSBbc11gLCAxMCwgYm91bmRhcnkgPSAxMCkpICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSwKICAgICAgICAgICAgbmV0d29ya19yZXNwb25zZSA9IG1lYW4oYEF2ZXJhZ2UgbmV0d29yayByZXNwb25zZSB0aW1lIFttc11gLG5hLnJtID0gVCkpICU+JQogIG5hLm9taXQoKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPiAyMCkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeD1sb2dvbl9pbnRlcnZhbCkpICsKICBnZW9tX2JhcihhZXMoeT1udW1iZXJfb2ZfZGV2aWNlcyksIHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsPSIjMTExRjY1IiwgY29sb3I9ImJsYWNrIixhbHBoYT0wLjkpICsKICBnZW9tX2xhYmVsKGFlcyh5ID0tMSwgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIixzaXplPTUpICsKICBnZW9tX3BvaW50KGFlcyh5PW5ldHdvcmtfcmVzcG9uc2UqMTApKSsKICBnZW9tX2xpbmUoYWVzKHk9bmV0d29ya19yZXNwb25zZSoxMCksIGdyb3VwPTEsIGNvbG9yPSIjRkY3NDYxIikrCiAgc2NhbGVfeV9jb250aW51b3VzKHNlYy5heGlzID0gc2VjX2F4aXMofi4vMTAsIG5hbWUgPSAiTmV0d29yayByZXNwb25zZSB0aW1lIChtcykiKSkgKwogIHRoZW1lX21pbmltYWwoKSsKICBsYWJzKHg9IkxvZ29uIHRpbWUgKHMpIiwgeT0iTnVtYmVyIG9mIGRldmljZXMiKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRpdGxlLnkucmlnaHQgID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgY29sb3VyID0gInJlZCIpLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKQpgYGAKCiMjIyBBRCBTaXRlCmBgYHtyIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpkZiAlPiUKICBncm91cF9ieShgQUQgc2l0ZWApICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSwKICAgICAgICAgICAgRFhTX0RldmljZSA9IHJvdW5kKG1lYW4oYERYUyAtIERldmljZSAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksMSksCiAgICAgICAgICAgIERYU19sb2dvbiA9IHJvdW5kKG1lYW4oYExvZ29uIGR1cmF0aW9uIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwxKSwKICAgICAgICAgICAgbG9nb25fcmVzcG9uc2VfdGltZSA9IHJvdW5kKG1lYW4oYExvZ29uIGR1cmF0aW9uIGJhc2VsaW5lIFtzXWAsIG5hLnJtID0gVCksMSksCiAgICAgICAgICAgIG5ldHdvcmtfcmVzcG9uc2UgPSByb3VuZChtZWFuKGBBdmVyYWdlIG5ldHdvcmsgcmVzcG9uc2UgdGltZSBbbXNdYCwgbmEucm0gPSBUKSwxKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG5hLm9taXQoKSAlPiUKICBnYXRoZXIoa2V5ICA9ICJEWFMiLCB2YWx1ZSA9ICJTY29yZSIsIC1uZXR3b3JrX3Jlc3BvbnNlLC1udW1iZXJfb2ZfZGV2aWNlcywtbG9nb25fcmVzcG9uc2VfdGltZSwtYEFEIHNpdGVgKSAlPiUKICBtdXRhdGUoYERYU2AgPSBzdHJfcmVwbGFjZV9hbGwoYERYU2AsIkRYU18iLCAiIikpICU+JQogIGZpbHRlcihudW1iZXJfb2ZfZGV2aWNlcyA+IDI1KSAlPiUKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYEFEIHNpdGVgKSkgKwogIGdlb21fY29sKGFlcyh5ID0gbmV0d29ya19yZXNwb25zZSksIHdpZHRoID0gLjQsIGZpbGwgPSAiIzExMUY2NSIsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoLS4yKSwgY29sb3VyID0gIkJsYWNrIikgKwogIGdlb21fY29sKGFlcyh5ID0gbG9nb25fcmVzcG9uc2VfdGltZSo1KSwgZmlsbCA9ICIjMzE5NEY3Iiwgd2lkdGggPSAuNCwgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSguMiksIGNvbG91ciA9ICJCbGFjayIpKwogIGdlb21fbGFiZWwoYWVzKHkgPS0xLCBsYWJlbD1wYXN0ZShudW1iZXJfb2ZfZGV2aWNlcywgIiBkZXZpY2VzIikpLCBzaG93LmxlZ2VuZCA9IEYsIGZpbGwgPSAid2hpdGUiLCBzaXplPTUpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+Li81LCBuYW1lPSJMb2dvbiB0aW1lIChzKSIpKSsKICBsYWJzKHkgPSAiTmV0d29yayBSZXNwb25zZSBUaW1lIChtcykiLCBmaWxsID0gIk9TIikgKwogIHRoZW1lX21pbmltYWwoKSsKICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICAgYXhpcy50aXRsZS55LmxlZnQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzExMUY2NSIpLAogICAgICAgICBheGlzLnRpdGxlLnkucmlnaHQgID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgY29sb3VyID0gIiMzMTk0RjciKSwKICAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKQoKYGBgCgoKIyMjIERldmljZXMgKG5vIExlbm92bykKYGBge3IgZmlnLndpZHRoPTIwLGZpZy5oZWlnaHQ9MTR9CmRmICU+JQogIGZpbHRlcihgRGV2aWNlIG1hbnVmYWN0dXJlcmAgIT0gIkxlbm92byIpICU+JQogIGdyb3VwX2J5KGBEZXZpY2UgbW9kZWxgKSAlPiUKICBzdW1tYXJpemUobnVtYmVyX29mX2RldmljZXMgPSBuKCksCiAgICAgICAgICAgIERYU19EZXZpY2UgPSByb3VuZChtZWFuKGBEWFMgLSBEZXZpY2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBEWFNfbG9nb24gPSByb3VuZChtZWFuKGBMb2dvbiBkdXJhdGlvbiAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksMSksCiAgICAgICAgICAgIGxvZ29uX3Jlc3BvbnNlX3RpbWUgPSByb3VuZChtZWFuKGBMb2dvbiBkdXJhdGlvbiBiYXNlbGluZSBbc11gLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBuZXR3b3JrX3Jlc3BvbnNlID0gcm91bmQobWVhbihgQXZlcmFnZSBuZXR3b3JrIHJlc3BvbnNlIHRpbWUgW21zXWAsIG5hLnJtID0gVCksMSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPj0yNSkgJT4lCiAgYXJyYW5nZShkZXNjKG51bWJlcl9vZl9kZXZpY2VzKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGdhdGhlcihrZXkgID0gIkRYUyIsIHZhbHVlID0gIlNjb3JlIiwgLW5ldHdvcmtfcmVzcG9uc2UsLW51bWJlcl9vZl9kZXZpY2VzLC1sb2dvbl9yZXNwb25zZV90aW1lLC1gRGV2aWNlIG1vZGVsYCkgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFNfIiwgIiIpKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPiAyNSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGBEZXZpY2UgbW9kZWxgKSkgKwogIGdlb21fY29sKGFlcyh5ID0gbmV0d29ya19yZXNwb25zZSksIHdpZHRoID0gLjQsIGZpbGwgPSAiIzExMUY2NSIsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoLS4yKSwgY29sb3VyID0gIkJsYWNrIikgKwogIGdlb21fY29sKGFlcyh5ID0gbG9nb25fcmVzcG9uc2VfdGltZSo1KSwgZmlsbCA9ICIjMzE5NEY3Iiwgd2lkdGggPSAuNCwgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSguMiksIGNvbG91ciA9ICJCbGFjayIpKwogIGdlb21fbGFiZWwoYWVzKHkgPS0xLCBsYWJlbD1wYXN0ZShudW1iZXJfb2ZfZGV2aWNlcywgIiBkZXZpY2VzIikpLCBzaG93LmxlZ2VuZCA9IEYsIGZpbGwgPSAid2hpdGUiLCBzaXplPTUpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+Li81LCBuYW1lPSJMb2dvbiB0aW1lIChzKSIpKSsKICBsYWJzKHkgPSAiTmV0d29yayBSZXNwb25zZSBUaW1lIChtcykiLCBmaWxsID0gIk9TIikgKwogIHRoZW1lX21pbmltYWwoKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksCiAgICAgICAgYXhpcy50aXRsZS55LmxlZnQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzExMUY2NSIpLAogICAgICAgIGF4aXMudGl0bGUueS5yaWdodCAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzMxOTRGNyIpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKYGBgCgoKIyMjIERldmljZXMgKG9ubHkgTGVub3ZvKQpgYGB7ciBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYgJT4lCiAgZmlsdGVyKGBEZXZpY2UgbWFudWZhY3R1cmVyYCA9PSAiTGVub3ZvIikgJT4lCiAgZ3JvdXBfYnkoYERldmljZSBwcm9kdWN0IHZlcnNpb25gKSAlPiUKICBzdW1tYXJpemUobnVtYmVyX29mX2RldmljZXMgPSBuKCksCiAgICAgICAgICAgIERYU19EZXZpY2UgPSByb3VuZChtZWFuKGBEWFMgLSBEZXZpY2UgKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBEWFNfbG9nb24gPSByb3VuZChtZWFuKGBMb2dvbiBkdXJhdGlvbiAoRFhTIC0gRGV2aWNlKWAsIG5hLnJtID0gVCksMSksCiAgICAgICAgICAgIGxvZ29uX3Jlc3BvbnNlX3RpbWUgPSByb3VuZChtZWFuKGBMb2dvbiBkdXJhdGlvbiBiYXNlbGluZSBbc11gLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBuZXR3b3JrX3Jlc3BvbnNlID0gcm91bmQobWVhbihgQXZlcmFnZSBuZXR3b3JrIHJlc3BvbnNlIHRpbWUgW21zXWAsIG5hLnJtID0gVCksMSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBhcnJhbmdlKGRlc2MobnVtYmVyX29mX2RldmljZXMpKSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgZ2F0aGVyKGtleSAgPSAiRFhTIiwgdmFsdWUgPSAiU2NvcmUiLCAtbmV0d29ya19yZXNwb25zZSwtbnVtYmVyX29mX2RldmljZXMsLWxvZ29uX3Jlc3BvbnNlX3RpbWUsLWBEZXZpY2UgcHJvZHVjdCB2ZXJzaW9uYCkgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFNfIiwgIiIpKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPj0gNSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGBEZXZpY2UgcHJvZHVjdCB2ZXJzaW9uYCkpICsKICBnZW9tX2NvbChhZXMoeSA9IG5ldHdvcmtfcmVzcG9uc2UpLCB3aWR0aCA9IC40LCBmaWxsID0gIiMxMTFGNjUiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKC0uMiksIGNvbG91ciA9ICJCbGFjayIpICsKICBnZW9tX2NvbChhZXMoeSA9IGxvZ29uX3Jlc3BvbnNlX3RpbWUqNSksIGZpbGwgPSAiIzMxOTRGNyIsIHdpZHRoID0gLjQsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoLjIpLCBjb2xvdXIgPSAiQmxhY2siKSsKICBnZW9tX2xhYmVsKGFlcyh5ID0tMSwgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIixzaXplPTUpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+Li81LCBuYW1lPSJMb2dvbiB0aW1lIChzKSIpKSsKICBsYWJzKHkgPSAiTmV0d29yayBSZXNwb25zZSBUaW1lIChtcykiLCBmaWxsID0gIk9TIikgKwogIHRoZW1lX21pbmltYWwoKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksCiAgICAgICAgYXhpcy50aXRsZS55LmxlZnQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzExMUY2NSIpLAogICAgICAgIGF4aXMudGl0bGUueS5yaWdodCAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzMxOTRGNyIpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKYGBgCgpgYGB7ciBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYgJT4lCiAgZ3JvdXBfYnkoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWApICU+JQogIHN1bW1hcml6ZShgbnVtYmVyX29mX2RldmljZXNgID0gbigpLAogICAgICAgICAgICBEWFNfRGV2aWNlID0gcm91bmQobWVhbihgRFhTIC0gRGV2aWNlIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwxKSwKICAgICAgICAgICAgRFhTX2xvZ29uID0gcm91bmQobWVhbihgTG9nb24gZHVyYXRpb24gKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBsb2dvbl9yZXNwb25zZV90aW1lID0gcm91bmQobWVhbihgTG9nb24gZHVyYXRpb24gYmFzZWxpbmUgW3NdYCwgbmEucm0gPSBUKSwxKSwKICAgICAgICAgICAgbmV0d29ya19yZXNwb25zZSA9IHJvdW5kKG1lYW4oYEF2ZXJhZ2UgbmV0d29yayByZXNwb25zZSB0aW1lIFttc11gLCBuYS5ybSA9IFQpLDEpKSAlPiUKICBtdXRhdGUoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAgPSBzdHJfcmVwbGFjZV9hbGwoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAsIldpbmRvd3MiLCAiVyIpKSAlPiUKICBtdXRhdGUoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAgPSBzdHJfcmVwbGFjZV9hbGwoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAsIkVudGVycHJpc2UiLCAiRSIpKSAlPiUKICBtdXRhdGUoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAgPSBzdHJfcmVwbGFjZV9hbGwoYE9TIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZWAsIlByb2Zlc3Npb25hbCIsICJQcm8iKSkgJT4lCiAgbXV0YXRlKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgID0gc3RyX3JlcGxhY2VfYWxsKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgLCIoNjQgYml0cykiLCAiNjQiKSkgJT4lCiAgbXV0YXRlKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgID0gc3RyX3JlcGxhY2VfYWxsKGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgLCIoMzIgYml0cykiLCAiMzIiKSkgJT4lCiAgYXJyYW5nZShkZXNjKGBudW1iZXJfb2ZfZGV2aWNlc2ApKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKG51bWJlcl9vZl9kZXZpY2VzID49NSkgJT4lCiAgYXJyYW5nZShkZXNjKG51bWJlcl9vZl9kZXZpY2VzKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGdhdGhlcihrZXkgID0gIkRYUyIsIHZhbHVlID0gIlNjb3JlIiwgLW5ldHdvcmtfcmVzcG9uc2UsLW51bWJlcl9vZl9kZXZpY2VzLC1sb2dvbl9yZXNwb25zZV90aW1lLC1gT1MgdmVyc2lvbiBhbmQgYXJjaGl0ZWN0dXJlYCkgJT4lCiAgbXV0YXRlKGBEWFNgID0gc3RyX3JlcGxhY2VfYWxsKGBEWFNgLCJEWFNfIiwgIiIpKSAlPiUKICBmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPj0gNSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGBPUyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmVgKSkgKwogIGdlb21fY29sKGFlcyh5ID0gbmV0d29ya19yZXNwb25zZSksIHdpZHRoID0gLjQsIGZpbGwgPSAiIzExMUY2NSIsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoLS4yKSwgY29sb3VyID0gIkJsYWNrIikgKwogIGdlb21fY29sKGFlcyh5ID0gbG9nb25fcmVzcG9uc2VfdGltZSo1KSwgZmlsbCA9ICIjMzE5NEY3Iiwgd2lkdGggPSAuNCwgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSguMiksIGNvbG91ciA9ICJCbGFjayIpKwogIGdlb21fbGFiZWwoYWVzKHkgPS0xLCBsYWJlbD1wYXN0ZShudW1iZXJfb2ZfZGV2aWNlcywgIiBkZXZpY2VzIikpLCBzaG93LmxlZ2VuZCA9IEYsIGZpbGwgPSAid2hpdGUiLCBzaXplPTUpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+Li81LCBuYW1lPSJMb2dvbiB0aW1lIChzKSIpKSsKICBsYWJzKHkgPSAiTmV0d29yayBSZXNwb25zZSBUaW1lIChtcykiLCBmaWxsID0gIk9TIikgKwogIHRoZW1lX21pbmltYWwoKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksCiAgICAgICAgYXhpcy50aXRsZS55LmxlZnQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzExMUY2NSIpLAogICAgICAgIGF4aXMudGl0bGUueS5yaWdodCAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzMxOTRGNyIpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKYGBgCgoKIyMjIFJBTQpgYGB7ciBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYgJT4lCiAgZ3JvdXBfYnkocmFtID0gY3V0X3dpZHRoKGBUb3RhbCBSQU0gW2J5dGVzXWAvKDEwMjReMyksIDEwLCBib3VuZGFyeSA9IDEwKSkgJT4lCiAgc3VtbWFyaXplKG51bWJlcl9vZl9kZXZpY2VzID0gbigpLAogICAgICAgICAgICBEWFNfRGV2aWNlID0gcm91bmQobWVhbihgRFhTIC0gRGV2aWNlIChEWFMgLSBEZXZpY2UpYCwgbmEucm0gPSBUKSwxKSwKICAgICAgICAgICAgRFhTX2xvZ29uID0gcm91bmQobWVhbihgTG9nb24gZHVyYXRpb24gKERYUyAtIERldmljZSlgLCBuYS5ybSA9IFQpLDEpLAogICAgICAgICAgICBsb2dvbl90aW1lID0gcm91bmQobWVhbihgTG9nb24gZHVyYXRpb24gYmFzZWxpbmUgW3NdYCwgbmEucm0gPSBUKSwxKSwKICAgICAgICAgICAgbmV0d29ya19yZXNwb25zZSA9IHJvdW5kKG1lYW4oYEF2ZXJhZ2UgbmV0d29yayByZXNwb25zZSB0aW1lIFttc11gLCBuYS5ybSA9IFQpLDEpKSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgYXJyYW5nZShkZXNjKG51bWJlcl9vZl9kZXZpY2VzKSkgJT4lCiAgbmEub21pdCgpICU+JQogIGdhdGhlcihrZXkgID0gIkRYUyIsIHZhbHVlID0gIlNjb3JlIiwgLW5ldHdvcmtfcmVzcG9uc2UsLW51bWJlcl9vZl9kZXZpY2VzLC1sb2dvbl90aW1lLC1yYW0pICU+JQogIG11dGF0ZShgRFhTYCA9IHN0cl9yZXBsYWNlX2FsbChgRFhTYCwiRFhTXyIsICIiKSkgJT4lCiAgZmlsdGVyKG51bWJlcl9vZl9kZXZpY2VzID4gNSkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IHJhbSkpICsKICBnZW9tX2NvbChhZXMoeSA9IG5ldHdvcmtfcmVzcG9uc2UpLCB3aWR0aCA9IC40LCBmaWxsID0gIiMxMTFGNjUiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKC0uMiksIGNvbG91ciA9ICJCbGFjayIpICsKICBnZW9tX2NvbChhZXMoeSA9IGxvZ29uX3RpbWUqNSksIGZpbGwgPSAiIzMxOTRGNyIsIHdpZHRoID0gLjQsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoLjIpLCBjb2xvdXIgPSAiQmxhY2siKSsKICBnZW9tX2xhYmVsKGFlcyh5ID0tMSwgbGFiZWw9cGFzdGUobnVtYmVyX29mX2RldmljZXMsICIgZGV2aWNlcyIpKSwgc2hvdy5sZWdlbmQgPSBGLCBmaWxsID0gIndoaXRlIixzaXplPTUpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+Li81LCBuYW1lPSJMb2dvbiB0aW1lIChzKSIpKSsKICBsYWJzKHkgPSAiTmV0d29yayBSZXNwb25zZSBUaW1lIChtcykiLCB4PSJSQU0iKSArCiAgdGhlbWVfbWluaW1hbCgpKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgYXhpcy50aXRsZS55LmxlZnQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzExMUY2NSIpLAogICAgICAgIGF4aXMudGl0bGUueS5yaWdodCAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBjb2xvdXIgPSAiIzMxOTRGNyIpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKYGBgCgojIyBCU09EIGFuZCBIYXJkIFJlc2V0cwojIyMgSGFyZCBSZXNldHMKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1UUlVFLCBmaWcuYWxpZ249ImNlbnRlciIsIHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CmRmICU+JQogIGdyb3VwX2J5KGBOdW1iZXIgb2YgaGFyZCByZXNldHNgKSAlPiUKICBzdW1tYXJpemUoYE51bWJlciBvZiBkZXZpY2VzYCA9IG4oKSkgJT4lCiAgZm9ybWF0dGFibGUoCiAgICAgICAgICAgICAgYWxpZ249YygibCIsImwiKSkKYGBgCgojIyMgQ3JhaHNlcwpgYGB7ciBlY2hvPUZBTFNFLCBldmFsPVRSVUUsIGZpZy5hbGlnbj0iY2VudGVyIiwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLCBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYgJT4lCiAgZ3JvdXBfYnkoYE51bWJlciBvZiBzeXN0ZW0gY3Jhc2hlc2ApICU+JQogIHN1bW1hcml6ZShgTnVtYmVyIG9mIGRldmljZXNgID0gbigpKSAlPiUKICBmb3JtYXR0YWJsZSgKICAgICAgICAgICAgICBhbGlnbj1jKCJsIiwibCIpKQpgYGAKCiMjIyBIYXJkIHJlc2V0cyB2cyBSQU0KYGBge3IgZWNobz1GQUxTRSwgZXZhbD1UUlVFLCBmaWcuYWxpZ249ImNlbnRlciIsIHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CnJhbV9pbnRlcnZhbCA8LSBjKCIwLTQiLCI0LTgiLCI4LTEyIiwiMTItMTYiLCIxNi0yMCIsIjI4LTMyIikKZGYgJT4lCiAgZ3JvdXBfYnkoYFJBTSAoR0IpYCA9IGN1dF93aWR0aChgVG90YWwgUkFNIFtieXRlc11gLygxMDI0XjMpLCA0LCBib3VuZGFyeSA9IDQpKSAlPiUKICBzdW1tYXJpemUoYE51bWJlciBvZiBkZXZpY2VzYCA9IG4oKSwKICAgICAgICAgICAgYEF2ZXJhZ2UgTnVtYmVyIG9mIGhhcmQgcmVzZXRzYCA9IG1lYW4oYE51bWJlciBvZiBoYXJkIHJlc2V0c2ApLAogICAgICAgICAgICBgQXZlcmFnZSBudW1iZXIgb2YgYXBwIGNyYXNoZXNgID0gcm91bmQobWVhbihgTnVtYmVyIG9mIGFwcGxpY2F0aW9uIGNyYXNoZXNgKSwwKSwKICAgICAgICAgICAgYEF2ZXJhZ2UgbnVtYmVyIG9mIGFwcCBmcmVlemVzYCA9IHJvdW5kKG1lYW4oYE51bWJlciBvZiBhcHBsaWNhdGlvbiBub3QgcmVzcG9uZGluZyBldmVudHNgKSwwKSkgJT4lCiAgZmlsdGVyKGBOdW1iZXIgb2YgZGV2aWNlc2AgPiAyMCkgJT4lCiAgbXV0YXRlKGBSQU0gKEdCKWAgPSByYW1faW50ZXJ2YWwpICU+JQogIGZvcm1hdHRhYmxlKGFsaWduID0gYygiYyIsImMiLCJjIiwiYyIsImMiKSkKCmBgYAoKIyMjIENyYXNoZXMgdnMgUkFNCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRSwgZmlnLmFsaWduPSJjZW50ZXIiLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpyYW1faW50ZXJ2YWwgPC0gYygiMC00IiwiNC04IiwiOC0xMiIsIjEyLTE2IiwiMTYtMjAiLCIyOC0zMiIpCmRmICU+JQogIGdyb3VwX2J5KGBSQU0gKEdCKWAgPSBjdXRfd2lkdGgoYFRvdGFsIFJBTSBbYnl0ZXNdYC8oMTAyNF4zKSwgNCwgYm91bmRhcnkgPSA0KSkgJT4lCiAgc3VtbWFyaXplKGBOdW1iZXIgb2YgZGV2aWNlc2AgPSBuKCksCiAgICAgICAgICAgIGBBdmVyYWdlIE51bWJlciBvZiBzeXN0ZW0gY3Jhc2hlc2AgPSBtZWFuKGBOdW1iZXIgb2Ygc3lzdGVtIGNyYXNoZXNgKSwKICAgICAgICAgICAgYEF2ZXJhZ2UgbnVtYmVyIG9mIGFwcCBjcmFzaGVzYCA9IHJvdW5kKG1lYW4oYE51bWJlciBvZiBhcHBsaWNhdGlvbiBjcmFzaGVzYCksMCksCiAgICAgICAgICAgIGBBdmVyYWdlIG51bWJlciBvZiBhcHAgZnJlZXplc2AgPSByb3VuZChtZWFuKGBOdW1iZXIgb2YgYXBwbGljYXRpb24gbm90IHJlc3BvbmRpbmcgZXZlbnRzYCksMCkpICU+JQogIGZpbHRlcihgTnVtYmVyIG9mIGRldmljZXNgID4gMjApICU+JQogIG11dGF0ZShgUkFNIChHQilgID0gcmFtX2ludGVydmFsKSAlPiUKICBmb3JtYXR0YWJsZShhbGlnbiA9IGMoImMiLCJjIiwiYyIsImMiLCJjIikpCgoKYGBgCgojIyBEaXNrIFNwYWNlCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRSwgZmlnLmFsaWduPSJjZW50ZXIiLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpkZiAlPiUKICBncm91cF9ieShkaXNrX3NwYWNlX2ludGVydmFsID0gY3V0X3dpZHRoKGBTeXN0ZW0gZHJpdmUgZnJlZSBzcGFjZSBbYnl0ZXNdYC8oMTAyNF4zKSwgMjAsIGJvdW5kYXJ5ID0gMCkpICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSkgJT4lCiAgZmlsdGVyKG51bWJlcl9vZl9kZXZpY2VzID49MjUpJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeD1kaXNrX3NwYWNlX2ludGVydmFsKSkgKwogIGdlb21fYmFyKGFlcyh5PW51bWJlcl9vZl9kZXZpY2VzKSwgc3RhdCA9ICJpZGVudGl0eSIsIGZpbGw9IiMxMTFGNjUiLCBjb2xvciA9ICJibGFjayIpKwogIGxhYnMoeD0iRGlzayBzcGFjZSAoR0IpIiwgeT0iTnVtYmVyIG9mIGRldmljZXMiKSsKICB0aGVtZV9taW5pbWFsKCkrCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKYGBgCgoKIyMgTWVtb3J5CmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRSwgZmlnLmFsaWduPSJjZW50ZXIiLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpkZiAlPiUKICBncm91cF9ieShoaWdoX21lbW9yeV9yYXRpbyA9IGN1dF93aWR0aChgSGlnaCBkZXZpY2UgbWVtb3J5IHRpbWUgcmF0aW8gWyVdYCwgMTAsIGJvdW5kYXJ5ID0gMCkpICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSwKICAgICAgICAgICAgbWVtb3J5PXJvdW5kKG1lYW4oYFRvdGFsIFJBTSBbYnl0ZXNdYC8oMTAyNF4zKSksMCkpICU+JQogIGZpbHRlcihudW1iZXJfb2ZfZGV2aWNlcyA+PTIwKSAlPiUKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4PWhpZ2hfbWVtb3J5X3JhdGlvKSkgKwogIGdlb21fYmFyKGFlcyh5PW51bWJlcl9vZl9kZXZpY2VzKSwgc3RhdCA9ICJpZGVudGl0eSIsZmlsbD0iIzExMUY2NSIsIGNvbG9yID0gImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5PW1lbW9yeSoxMDApLCBncm91cD0xKSsKICBnZW9tX3BvaW50KGFlcyh5PW1lbW9yeSoxMDApKSsKICBnZW9tX2xhYmVsX3JlcGVsKGFlcyh5PW1lbW9yeSoxMDAsIGxhYmVsPSBwYXN0ZShtZW1vcnksICIgR0IiKSksc3RhdCA9ICJ1bmlxdWUiLCBzaXplPTUpKwogIHNjYWxlX3lfY29udGludW91cyhzZWMuYXhpcyA9IHNlY19heGlzKH4uLzEwMCwgbmFtZT0iUkFNIChHQikiKSkrCiAgbGFicyh4PSJIaWdoIE1lbW9yeSB0aW1lIHJhdGlvIiwgeT0iTnVtYmVyIG9mIGRldmljZXMiKSsKICB0aGVtZV9taW5pbWFsKCkrCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCkpCgpgYGAKCiMjIENQVQpgYGB7ciBlY2hvPUZBTFNFLCBldmFsPVRSVUUsIGZpZy5hbGlnbj0iY2VudGVyIiwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLCBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYgJT4lCiAgZ3JvdXBfYnkoaGlnaF9jcHVfcmF0aW8gPSBjdXRfd2lkdGgoYEhpZ2ggZGV2aWNlIG92ZXJhbGwgQ1BVIHRpbWUgcmF0aW8gWyVdYCwgMTAsIGJvdW5kYXJ5ID0gMCkpICU+JQogIHN1bW1hcml6ZShudW1iZXJfb2ZfZGV2aWNlcyA9IG4oKSwKICAgICAgICAgICAgbnVtYmVyX29mX2NvcmVzPSByb3VuZChtZWFuKGBOdW1iZXIgb2YgY29yZXNgLG5hLnJtID0gVCksMCkpICU+JQogICNmaWx0ZXIobnVtYmVyX29mX2RldmljZXMgPj0yMCkgJT4lCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeD1oaWdoX2NwdV9yYXRpbykpICsKICBnZW9tX2JhcihhZXMoeT1udW1iZXJfb2ZfZGV2aWNlcyksIHN0YXQgPSAiaWRlbnRpdHkiLGZpbGw9IiMxMTFGNjUiLCBjb2xvciA9ICJibGFjayIpKwogIGdlb21fbGluZShhZXMoeT1udW1iZXJfb2ZfY29yZXMqMTAwKSwgZ3JvdXA9MSkrCiAgZ2VvbV9wb2ludChhZXMoeT1udW1iZXJfb2ZfY29yZXMqMTAwKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKHNlYy5heGlzID0gc2VjX2F4aXMofi4vMTAwLCBuYW1lPSJDb3JlcyIpKSsKICBnZW9tX2xhYmVsX3JlcGVsKGFlcyh5PW51bWJlcl9vZl9jb3JlcyoxMDAsIGxhYmVsPSBwYXN0ZSgiIyIsbnVtYmVyX29mX2NvcmVzKSksc3RhdCA9ICJ1bmlxdWUiLHNpemU9NSkrCiAgdGhlbWVfbWluaW1hbCgpKwogIGxhYnMoeD0iSGlnaCBjcHUgdGltZSByYXRpbyIseT0iTnVtYmVyIG9mIGRldmljZXMiKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSkKCmBgYAoKIyBBcHBsaWNhdGlvbnMKIyMgT3ZlcnZpZXcKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1UUlVFLCBmaWcuYWxpZ249ImNlbnRlciIsIHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CmRmLmFwcCAlPiUKICBncm91cF9ieSggYEFwcGxpY2F0aW9uIG5hbWVgKSAlPiUKICBzdW1tYXJpemUoYE51bWJlciBvZiBkZXZpY2VzYCA9IHN1bShgTnVtYmVyIG9mIGRldmljZXNgKSwKICAgICAgICAgICAgYE51bWJlciBvZiBleGVjdXRpb25zYCA9IHN1bShgTnVtYmVyIG9mIGV4ZWN1dGlvbnNgKSwKICAgICAgICAgICAgYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gKE1CKWAgPSByb3VuZChtZWFuKGBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtNQl1gLCBuYS5ybSA9IFQpLDEpKSAlPiUKICBmaWx0ZXIoYE51bWJlciBvZiBkZXZpY2VzYD4xMDAsYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gKE1CKWAgPiAxNTApICU+JQogIGFycmFuZ2UoLWBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIChNQilgKSAlPiUKICBmb3JtYXR0YWJsZShhbGlnbiA9IGMoImMiLCJjIiwiYyIsImMiKSkKYGBgCgojIyBIaWdoIG51bWJlciBvZiBFeGNlY3V0aW9ucwpgYGB7ciBlY2hvPUZBTFNFLCBldmFsPVRSVUUsIGZpZy5hbGlnbj0iY2VudGVyIiwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLCBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYuYXBwICU+JQogIGdyb3VwX2J5KCBgQXBwbGljYXRpb24gbmFtZWApICU+JQogIHN1bW1hcml6ZShgTnVtYmVyIG9mIGV4ZWN1dGlvbnNgID0gc3VtKGBOdW1iZXIgb2YgZXhlY3V0aW9uc2ApLAogICAgICAgICAgICBgQXZlcmFnZSBtZW1vcnkgdXNhZ2UgcGVyIGV4ZWN1dGlvbiAoTUIpYCA9IHJvdW5kKG1lYW4oYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gW01CXWAsIG5hLnJtID0gVCksMSkpICU+JQogIGZpbHRlcihgQXZlcmFnZSBtZW1vcnkgdXNhZ2UgcGVyIGV4ZWN1dGlvbiAoTUIpYCA+IDQwLCBgTnVtYmVyIG9mIGV4ZWN1dGlvbnNgID4gNTAwMDApICU+JQogIGFycmFuZ2UoLWBOdW1iZXIgb2YgZXhlY3V0aW9uc2ApICU+JQogIGZvcm1hdHRhYmxlKGFsaWduID0gYygiYyIsImMiLCJjIikpCmBgYAoKIyMgQ2hyb21lCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRSwgZmlnLmFsaWduPSJjZW50ZXIiLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpkZi5jaHIgJT4lCiAgc2VsZWN0KGV2ZXJ5dGhpbmcoKSwgLWBFeGVjdXRhYmxlIG5hbWVgLC1gQXBwbGljYXRpb24gbmFtZWApICU+JQogIGFycmFuZ2UoLWBOdW1iZXIgb2YgZXhlY3V0aW9uc2ApICU+JQogIGZpbHRlcihgTnVtYmVyIG9mIGRldmljZXNgID49IDEwICYgYE51bWJlciBvZiBleGVjdXRpb25zYCA+IDQwMDApICU+JQogIGZvcm1hdHRhYmxlKGFsaWduPWMoImMiLCJjIiwiYyIsImMiKSkKYGBgCgojIyBPZmZpY2UKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1UUlVFLCBmaWcuYWxpZ249ImNlbnRlciIsIHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTE3LGZpZy5oZWlnaHQ9MTJ9CmRmLm9mZmljZSAlPiUKICBhcnJhbmdlKC1gQXZlcmFnZSBtZW1vcnkgdXNhZ2UgcGVyIGV4ZWN1dGlvbiBbTUJdYCkgJT4lCiAgZmlsdGVyKGBOdW1iZXIgb2YgZGV2aWNlc2AgPj0gNTAwICYgYE51bWJlciBvZiBleGVjdXRpb25zYCA+IDQwMDApICU+JQogIGZvcm1hdHRhYmxlKGFsaWduPWMoImMiLCJjIiwiYyIsImMiLCJjIikpCmBgYAoKIyMjIEV4Y2VsCmBgYHtyIGVjaG89RkFMU0UsIGV2YWw9VFJVRSwgZmlnLmFsaWduPSJjZW50ZXIiLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsIGZpZy53aWR0aD0xNyxmaWcuaGVpZ2h0PTEyfQpkZi5vZmZpY2UgJT4lCiAgYXJyYW5nZSgtYEF2ZXJhZ2UgbWVtb3J5IHVzYWdlIHBlciBleGVjdXRpb24gW01CXWApICU+JQogIGZpbHRlcihgRXhlY3V0YWJsZSBuYW1lYCA9PSAnZXhjZWwuZXhlJykgJT4lCiAgZmlsdGVyKGBOdW1iZXIgb2YgZGV2aWNlc2AgPj0gMTAgJiBgTnVtYmVyIG9mIGV4ZWN1dGlvbnNgID4gMTAwMCkgJT4lCiAgZm9ybWF0dGFibGUoYWxpZ249YygiYyIsImMiLCJjIiwiYyIpKQpgYGAKCgojIyMgV29yZApgYGB7ciBlY2hvPUZBTFNFLCBldmFsPVRSVUUsIGZpZy5hbGlnbj0iY2VudGVyIiwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLCBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYub2ZmaWNlICU+JQogIGFycmFuZ2UoLWBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtNQl1gKSAlPiUKICBmaWx0ZXIoYEV4ZWN1dGFibGUgbmFtZWAgPT0gJ3dpbndvcmQuZXhlJykgJT4lCiAgZmlsdGVyKGBOdW1iZXIgb2YgZGV2aWNlc2AgPj0gMTAgJiBgTnVtYmVyIG9mIGV4ZWN1dGlvbnNgID4gMTAwMCkgJT4lCiAgZm9ybWF0dGFibGUoYWxpZ249YygiYyIsImMiLCJjIiwiYyIpKQpgYGAKCgojIyMgUG93ZXJQb2ludApgYGB7ciBlY2hvPUZBTFNFLCBldmFsPVRSVUUsIGZpZy5hbGlnbj0iY2VudGVyIiwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLCBmaWcud2lkdGg9MTcsZmlnLmhlaWdodD0xMn0KZGYub2ZmaWNlICU+JQogIGFycmFuZ2UoLWBBdmVyYWdlIG1lbW9yeSB1c2FnZSBwZXIgZXhlY3V0aW9uIFtNQl1gKSAlPiUKICBmaWx0ZXIoYEV4ZWN1dGFibGUgbmFtZWAgPT0gJ3Bvd2VycG50LmV4ZScpICU+JQogIGZpbHRlcihgTnVtYmVyIG9mIGRldmljZXNgID49IDEwICYgYE51bWJlciBvZiBleGVjdXRpb25zYCA+IDEwMDApICU+JQogIGZvcm1hdHRhYmxlKGFsaWduPWMoImMiLCJjIiwiYyIsImMiLCJjIikpCmBgYAo=